package com.itheima.reggie.common;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLException;

/**
 * 全局异常处理器
 * 将来程项目中出现异常，就交给全局异常处理器来响应
 */

@RestControllerAdvice
public class GlobalExceptionHandler {

    //每一个方法就处理一种特定异常 CustomerException
    @ExceptionHandler(CustomerException.class)
    public R<String> exception2(CustomerException customerException) {
        //将异常信息输出控制台
        customerException.printStackTrace();
        //抓住自定义异常，需要响应对应的信息给前端
        return R.error(customerException.getMessage());
    }


    //每一个方法就处理一种特定异常 SQLIntegrityConstraintViolationException
    @ExceptionHandler(SQLException.class)
    public R<String> exception1(SQLException e) {
        //输出异常信息
        e.printStackTrace();

        //判断SQL异常信息属于哪一种类型
        if (e.getMessage().startsWith("Duplicate entry")) {
            //对错误信息进行截取 Duplicate entry 'zs' for key 'idx_username'
            String username = e.getMessage().split(" ")[2]; // ’zs‘
            return R.error(username + "用户名已存在");
        }

        if (e.getMessage().contains("Data too long")) {
            String col = e.getMessage().split(" ")[7];
            return R.error(col + "数据长度过长");
        }

        return R.error("未知错误");
    }


}
